package com.atguigu.srb.core.service.impl;

import com.atguigu.srb.common.util.JwtUtils;
import com.atguigu.srb.core.hfb.FormHelper;
import com.atguigu.srb.core.hfb.HfbConst;
import com.atguigu.srb.core.hfb.RequestHelper;
import com.atguigu.srb.core.pojo.entity.UserBind;
import com.atguigu.srb.core.mapper.UserBindMapper;
import com.atguigu.srb.core.service.UserBindService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.base.Predicates;
import org.springframework.stereotype.Service;

import java.util.HashMap;

/**
 * <p>
 * 用户绑定表 服务实现类
 * </p>
 *
 * @author Atguigu
 * @since 2023-03-25
 */
@Service
public class UserBindServiceImpl extends ServiceImpl<UserBindMapper, UserBind> implements UserBindService {

    @Override
    public String bindHfb(String token, UserBind userBind) {
        String userId = JwtUtils.getUserId(token);
        //创建一个map存放开户的接口
        HashMap<String, Object> params = new HashMap<>();
        params.put("agentUserId", userId);
        params.put("idCard", userBind.getIdCard());
        params.put("personalName", userBind.getName());
        params.put("bankType", userBind.getBankType());
        params.put("bankNo", userBind.getBankNo());
        params.put("mobile", userBind.getMobile());
        //同步地址，返回商家的地址
        params.put("returnUrl", HfbConst.USERBIND_RETURN_URL);
        //异步回调地址，用户绑定后hfb要访问的接口地址，hfb会传入用户绑定的结果（需要同步到srb的数据库）
        params.put("notifyUrl", HfbConst.USERBIND_NOTIFY_URL);
        params.put("timestamp", System.currentTimeMillis());
        //srb在hfb中注册时，hfb所分配的两个值
        //srb在hfb平台注册时分配的唯一id
        params.put("agentId", HfbConst.AGENT_ID);
        //签名，保证数据不会篡改，对以上数据进行加密得到的结果
        params.put("sign", RequestHelper.getSign(params));
        //保存用户数据到数据库user_bind中
        UserBind ub =
                this.getOne(Wrappers.lambdaQuery(UserBind.class)
                        .eq(UserBind::getUserId, userId));
        if (ub==null){
            //新增
            ub = new UserBind();
        }

        //使用上面接收到的数据，创建一个新的userbind对象
        ub.setUserId(Long.valueOf(userId));
        ub.setStatus(0); //0未绑定，1为绑定
        ub.setMobile(userBind.getMobile());
        ub.setBankNo(userBind.getBankNo());
        ub.setBankType(userBind.getBankType());
        ub.setIdCard(userBind.getIdCard());
        ub.setName(userBind.getName());
        this.saveOrUpdate(ub);//如果有id则更新，没有则新增

        return FormHelper.buildForm(HfbConst.USERBIND_URL, params);
    }
}